home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 July: Mac OS SDK / Dev.CD Jul 97 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Interfaces / CIncludes / Menus.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-05  |  11.9 KB  |  317 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        Menus.h
  3.  
  4.      Contains:    Menu Manager Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.1.3
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs@applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. */
  19.  
  20. #ifndef __MENUS__
  21. #define __MENUS__
  22.  
  23.  
  24. #ifndef __MEMORY__
  25. #include <Memory.h>
  26. #endif
  27. /*    #include <Types.h>                                            */
  28. /*        #include <ConditionalMacros.h>                            */
  29. /*    #include <MixedMode.h>                                        */
  30.  
  31. #ifndef __QUICKDRAW__
  32. #include <Quickdraw.h>
  33. #endif
  34. /*    #include <QuickdrawText.h>                                    */
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif
  39.  
  40. #if PRAGMA_ALIGN_SUPPORTED
  41. #pragma options align=mac68k
  42. #endif
  43.  
  44. #if PRAGMA_IMPORT_SUPPORTED
  45. #pragma import on
  46. #endif
  47.  
  48.  
  49. enum {
  50.     noMark                        = 0,                            /*mark symbol for MarkItem*/
  51. /* menu defProc messages */
  52.     mDrawMsg                    = 0,
  53.     mChooseMsg                    = 1,
  54.     mSizeMsg                    = 2,
  55.     mDrawItemMsg                = 4,
  56.     mCalcItemMsg                = 5,
  57.     textMenuProc                = 0,
  58.     hMenuCmd                    = 27,                            /*itemCmd == 0x001B ==> hierarchical menu*/
  59.     hierMenu                    = -1,                            /*a hierarchical menu - for InsertMenu call*/
  60.     mPopUpMsg                    = 3,                            /*menu defProc messages - place yourself*/
  61.     mctAllItems                    = -98,                            /*search for all Items for the given ID*/
  62.     mctLastIDIndic                = -99                            /*last color table entry has this in ID field*/
  63. };
  64.  
  65. struct MenuInfo {
  66.     short                            menuID;
  67.     short                            menuWidth;
  68.     short                            menuHeight;
  69.     Handle                            menuProc;
  70.     long                            enableFlags;
  71.     Str255                            menuData;
  72. };
  73. typedef struct MenuInfo MenuInfo, *MenuPtr, **MenuHandle;
  74.  
  75. typedef MenuHandle MenuRef;
  76.  
  77. typedef pascal void (*MenuDefProcPtr)(short message, MenuRef theMenu, Rect *menuRect, Point hitPt, short *whichItem);
  78. typedef pascal long (*MenuBarDefProcPtr)(short selector, short message, short parameter1, long parameter2);
  79. typedef pascal void (*MenuHookProcPtr)(void);
  80. typedef pascal short (*MBarHookProcPtr)(Rect *menuRect);
  81.  
  82. #if GENERATINGCFM
  83. typedef UniversalProcPtr MenuDefUPP;
  84. typedef UniversalProcPtr MenuBarDefUPP;
  85. typedef UniversalProcPtr MenuHookUPP;
  86. typedef UniversalProcPtr MBarHookUPP;
  87. #else
  88. typedef MenuDefProcPtr MenuDefUPP;
  89. typedef MenuBarDefProcPtr MenuBarDefUPP;
  90. typedef MenuHookProcPtr MenuHookUPP;
  91. typedef Register68kProcPtr MBarHookUPP;
  92. #endif
  93.  
  94. enum {
  95.     uppMenuDefProcInfo = kPascalStackBased
  96.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
  97.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(MenuRef)))
  98.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(Rect*)))
  99.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(Point)))
  100.          | STACK_ROUTINE_PARAMETER(5, SIZE_CODE(sizeof(short*))),
  101.     uppMenuBarDefProcInfo = kPascalStackBased
  102.          | RESULT_SIZE(SIZE_CODE(sizeof(long)))
  103.          | STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(short)))
  104.          | STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(short)))
  105.          | STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(short)))
  106.          | STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long))),
  107.     uppMenuHookProcInfo = kPascalStackBased,
  108.     uppMBarHookProcInfo = SPECIAL_CASE_PROCINFO( kSpecialCaseMBarHook )
  109. };
  110.  
  111. #if GENERATINGCFM
  112. #define NewMenuDefProc(userRoutine)        \
  113.         (MenuDefUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppMenuDefProcInfo, GetCurrentArchitecture())
  114. #define NewMenuBarDefProc(userRoutine)        \
  115.         (MenuBarDefUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppMenuBarDefProcInfo, GetCurrentArchitecture())
  116. #define NewMenuHookProc(userRoutine)        \
  117.         (MenuHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppMenuHookProcInfo, GetCurrentArchitecture())
  118. #define NewMBarHookProc(userRoutine)        \
  119.         (MBarHookUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppMBarHookProcInfo, GetCurrentArchitecture())
  120. #else
  121. #define NewMenuDefProc(userRoutine)        \
  122.         ((MenuDefUPP) (userRoutine))
  123. #define NewMenuBarDefProc(userRoutine)        \
  124.         ((MenuBarDefUPP) (userRoutine))
  125. #define NewMenuHookProc(userRoutine)        \
  126.         ((MenuHookUPP) (userRoutine))
  127. #define NewMBarHookProc(userRoutine)        \
  128.         ((MBarHookUPP) (userRoutine))
  129. #endif
  130.  
  131. #if GENERATINGCFM
  132. #define CallMenuDefProc(userRoutine, message, theMenu, menuRect, hitPt, whichItem)        \
  133.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppMenuDefProcInfo, (message), (theMenu), (menuRect), (hitPt), (whichItem))
  134. #define CallMenuBarDefProc(userRoutine, selector, message, parameter1, parameter2)        \
  135.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppMenuBarDefProcInfo, (selector), (message), (parameter1), (parameter2))
  136. #define CallMenuHookProc(userRoutine)        \
  137.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppMenuHookProcInfo)
  138. #define CallMBarHookProc(userRoutine, menuRect)        \
  139.         CallUniversalProc((UniversalProcPtr)(userRoutine), uppMBarHookProcInfo, (menuRect))
  140. #else
  141. #define CallMenuDefProc(userRoutine, message, theMenu, menuRect, hitPt, whichItem)        \
  142.         (*(userRoutine))((message), (theMenu), (menuRect), (hitPt), (whichItem))
  143. #define CallMenuBarDefProc(userRoutine, selector, message, parameter1, parameter2)        \
  144.         (*(userRoutine))((selector), (message), (parameter1), (parameter2))
  145. #define CallMenuHookProc(userRoutine)        \
  146.         (*(userRoutine))()
  147. /* (*MBarHookProcPtr) cannot be called from a high-level language without the Mixed Mode Manager */
  148. #endif
  149.  
  150. struct MCEntry {
  151.     short                            mctID;                        /*menu ID.  ID = 0 is the menu bar*/
  152.     short                            mctItem;                    /*menu Item. Item = 0 is a title*/
  153.     RGBColor                        mctRGB1;                    /*usage depends on ID and Item*/
  154.     RGBColor                        mctRGB2;                    /*usage depends on ID and Item*/
  155.     RGBColor                        mctRGB3;                    /*usage depends on ID and Item*/
  156.     RGBColor                        mctRGB4;                    /*usage depends on ID and Item*/
  157.     short                            mctReserved;                /*reserved for internal use*/
  158. };
  159. typedef struct MCEntry MCEntry;
  160.  
  161. typedef MCEntry *MCEntryPtr;
  162.  
  163. typedef MCEntry MCTable[1], *MCTablePtr, **MCTableHandle;
  164.  
  165. struct MenuCRsrc {
  166.     short                            numEntries;                    /*number of entries*/
  167.     MCTable                            mcEntryRecs;                /*ARRAY [1..numEntries] of MCEntry*/
  168. };
  169. typedef struct MenuCRsrc MenuCRsrc;
  170.  
  171. typedef MenuCRsrc *MenuCRsrcPtr, **MenuCRsrcHandle;
  172.  
  173. extern pascal short GetMBarHeight( void )
  174.     TWOWORDINLINE( 0x3EB8, 0x0BAA ); /* MOVE.w $0BAA,(SP) */
  175. extern pascal void InitMenus(void)
  176.  ONEWORDINLINE(0xA930);
  177. extern pascal MenuRef NewMenu(short menuID, ConstStr255Param menuTitle)
  178.  ONEWORDINLINE(0xA931);
  179. extern pascal MenuRef GetMenu(short resourceID)
  180.  ONEWORDINLINE(0xA9BF);
  181. extern pascal void DisposeMenu(MenuRef theMenu)
  182.  ONEWORDINLINE(0xA932);
  183. extern pascal void AppendMenu(MenuRef menu, ConstStr255Param data)
  184.  ONEWORDINLINE(0xA933);
  185. extern pascal void AppendResMenu(MenuRef theMenu, ResType theType)
  186.  ONEWORDINLINE(0xA94D);
  187. extern pascal void InsertResMenu(MenuRef theMenu, ResType theType, short afterItem)
  188.  ONEWORDINLINE(0xA951);
  189. extern pascal void InsertMenu(MenuRef theMenu, short beforeID)
  190.  ONEWORDINLINE(0xA935);
  191. extern pascal void DrawMenuBar(void)
  192.  ONEWORDINLINE(0xA937);
  193. extern pascal void InvalMenuBar(void)
  194.  ONEWORDINLINE(0xA81D);
  195. extern pascal void DeleteMenu(short menuID)
  196.  ONEWORDINLINE(0xA936);
  197. extern pascal void ClearMenuBar(void)
  198.  ONEWORDINLINE(0xA934);
  199. extern pascal Handle GetNewMBar(short menuBarID)
  200.  ONEWORDINLINE(0xA9C0);
  201. extern pascal Handle GetMenuBar(void)
  202.  ONEWORDINLINE(0xA93B);
  203. extern pascal void SetMenuBar(Handle menuList)
  204.  ONEWORDINLINE(0xA93C);
  205. extern pascal void InsertMenuItem(MenuRef theMenu, ConstStr255Param itemString, short afterItem)
  206.  ONEWORDINLINE(0xA826);
  207. extern pascal void DeleteMenuItem(MenuRef theMenu, short item)
  208.  ONEWORDINLINE(0xA952);
  209. extern pascal long MenuKey(short ch)
  210.  ONEWORDINLINE(0xA93E);
  211. extern pascal void HiliteMenu(short menuID)
  212.  ONEWORDINLINE(0xA938);
  213. extern pascal void SetMenuItemText(MenuRef theMenu, short item, ConstStr255Param itemString)
  214.  ONEWORDINLINE(0xA947);
  215. extern pascal void GetMenuItemText(MenuRef theMenu, short item, Str255 itemString)
  216.  ONEWORDINLINE(0xA946);
  217. extern pascal void DisableItem(MenuRef theMenu, short item)
  218.  ONEWORDINLINE(0xA93A);
  219. extern pascal void EnableItem(MenuRef theMenu, short item)
  220.  ONEWORDINLINE(0xA939);
  221. extern pascal void CheckItem(MenuRef theMenu, short item, Boolean checked)
  222.  ONEWORDINLINE(0xA945);
  223. extern pascal void SetItemMark(MenuRef theMenu, short item, short markChar)
  224.  ONEWORDINLINE(0xA944);
  225. extern pascal void GetItemMark(MenuRef theMenu, short item, short *markChar)
  226.  ONEWORDINLINE(0xA943);
  227. extern pascal void SetItemIcon(MenuRef theMenu, short item, short iconIndex)
  228.  ONEWORDINLINE(0xA940);
  229. extern pascal void GetItemIcon(MenuRef theMenu, short item, short *iconIndex)
  230.  ONEWORDINLINE(0xA93F);
  231. extern pascal void SetItemStyle(MenuRef theMenu, short item, short chStyle)
  232.  ONEWORDINLINE(0xA942);
  233. extern pascal void GetItemStyle(MenuRef theMenu, short item, Style *chStyle);
  234. extern pascal void CalcMenuSize(MenuRef theMenu)
  235.  ONEWORDINLINE(0xA948);
  236. extern pascal short CountMItems(MenuRef theMenu)
  237.  ONEWORDINLINE(0xA950);
  238. #define CountMenuItems(menu) CountMItems(menu)
  239. extern pascal MenuRef GetMenuHandle(short menuID)
  240.  ONEWORDINLINE(0xA949);
  241. extern pascal void FlashMenuBar(short menuID)
  242.  ONEWORDINLINE(0xA94C);
  243. extern pascal void SetMenuFlash(short count)
  244.  ONEWORDINLINE(0xA94A);
  245. extern pascal long MenuSelect(Point startPt)
  246.  ONEWORDINLINE(0xA93D);
  247. extern pascal void InitProcMenu(short resID)
  248.  ONEWORDINLINE(0xA808);
  249. extern pascal void GetItemCmd(MenuRef theMenu, short item, short *cmdChar)
  250.  ONEWORDINLINE(0xA84E);
  251. extern pascal void SetItemCmd(MenuRef theMenu, short item, short cmdChar)
  252.  ONEWORDINLINE(0xA84F);
  253. extern pascal long PopUpMenuSelect(MenuRef menu, short top, short left, short popUpItem)
  254.  ONEWORDINLINE(0xA80B);
  255. extern pascal long MenuChoice(void)
  256.  ONEWORDINLINE(0xAA66);
  257. extern pascal void DeleteMCEntries(short menuID, short menuItem)
  258.  ONEWORDINLINE(0xAA60);
  259. extern pascal MCTableHandle GetMCInfo(void)
  260.  ONEWORDINLINE(0xAA61);
  261. extern pascal void SetMCInfo(MCTableHandle menuCTbl)
  262.  ONEWORDINLINE(0xAA62);
  263. extern pascal void DisposeMCInfo(MCTableHandle menuCTbl)
  264.  ONEWORDINLINE(0xAA63);
  265. extern pascal MCEntryPtr GetMCEntry(short menuID, short menuItem)
  266.  ONEWORDINLINE(0xAA64);
  267. extern pascal void SetMCEntries(short numEntries, MCTablePtr menuCEntries)
  268.  ONEWORDINLINE(0xAA65);
  269. extern pascal void InsertFontResMenu(MenuRef theMenu, short afterItem, short scriptFilter)
  270.  THREEWORDINLINE(0x303C, 0x0400, 0xA825);
  271. extern pascal void InsertIntlResMenu(MenuRef theMenu, ResType theType, short afterItem, short scriptFilter)
  272.  THREEWORDINLINE(0x303C, 0x0601, 0xA825);
  273. extern pascal Boolean SystemEdit(short editCmd)
  274.  ONEWORDINLINE(0xA9C2);
  275. extern pascal void SystemMenu(long menuResult)
  276.  ONEWORDINLINE(0xA9B5);
  277. #if CGLUESUPPORTED
  278. extern MenuRef newmenu(short menuID, const char *menuTitle);
  279. extern void appendmenu(MenuRef menu, const char *data);
  280. extern void insertmenuitem(MenuRef theMenu, const char *itemString, short afterItem);
  281. extern long menuselect(const Point *startPt);
  282. extern void setmenuitemtext(MenuRef menu, short item, const char *itemString);
  283. extern void getmenuitemtext(MenuRef menu, short item, char *itemString);
  284. #endif
  285. #if OLDROUTINENAMES
  286. #define AddResMenu(theMenu, theType) AppendResMenu(theMenu, theType)
  287. #define InsMenuItem(theMenu, itemString, afterItem)  \
  288.     InsertMenuItem(theMenu, itemString, afterItem)
  289. #define DelMenuItem(theMenu, item) DeleteMenuItem(theMenu, item)
  290. #define SetItem(theMenu, item, itemString) SetMenuItemText(theMenu, item, itemString)
  291. #define GetItem(theMenu, item, itemString) GetMenuItemText(theMenu, item, itemString)
  292. #define GetMHandle(menuID) GetMenuHandle(menuID)
  293. #define DelMCEntries(menuID, menuItem) DeleteMCEntries(menuID, menuItem)
  294. #define DispMCInfo(menuCTbl) DisposeMCInfo(menuCTbl)
  295. #if CGLUESUPPORTED
  296. #define addresmenu(menu, data) appendresmenu(menu, data)
  297. #define getitem(menu, item, itemString) getmenuitemtext(menu, item, itemString)
  298. #define setitem(menu, item, itemString) setmenuitemtext(menu, item, itemString)
  299. #define insmenuitem(theMenu, itemString, afterItem)  \
  300.     insertmenuitem(theMenu, itemString, afterItem)
  301. #endif
  302. #endif
  303.  
  304. #if PRAGMA_IMPORT_SUPPORTED
  305. #pragma import off
  306. #endif
  307.  
  308. #if PRAGMA_ALIGN_SUPPORTED
  309. #pragma options align=reset
  310. #endif
  311.  
  312. #ifdef __cplusplus
  313. }
  314. #endif
  315.  
  316. #endif /* __MENUS__ */
  317.